feat(compat): add vendor compatibility translation edge#12
Conversation
045c7ce to
57185ba
Compare
|
✅ Docs preview build completed successfully! All tests passed. |
|
✅ Docs preview build completed successfully! All tests passed. |
|
✅ Docs preview build completed successfully! All tests passed. |
|
✅ Docs preview build completed successfully! All tests passed. |
|
✅ Docs preview build completed successfully! All tests passed. |
|
✅ Docs preview build completed successfully! All tests passed. |
2830c94 to
ada4134
Compare
|
✅ Docs preview build completed successfully! All tests passed. |
1 similar comment
|
✅ Docs preview build completed successfully! All tests passed. |
|
✅ Docs preview build completed successfully! All tests passed. |
|
✅ Docs preview build completed successfully! All tests passed. |
0c4c49b to
f06f47f
Compare
|
✅ Docs preview build completed successfully! All tests passed. |
1 similar comment
|
✅ Docs preview build completed successfully! All tests passed. |
Adds compat/ package and docker-compose.compat.yml overlay that accepts
telemetry from Datadog, Jaeger (legacy wire protocol), and Splunk HEC
agents and forwards OTLP to the base observability-stack collector.
Includes customer-facing documentation under docs/starlight-docs and a
Writing Tenets section in CONTRIBUTING.md.
The overlay is opt-in and follows the existing INCLUDE_COMPOSE_*
activation pattern. The base collector, its config, and all existing
pipelines are unchanged.
Activation:
echo 'INCLUDE_COMPOSE_COMPAT=docker-compose.compat.yml' >> .env
docker compose up -d
Compat collector pipelines:
- traces: [datadog, jaeger]
- metrics: [datadog, statsd, splunk_hec]
- logs: [datadog, splunk_hec]
Modern OpenTelemetry SDK applications bypass the compat hop and send
OTLP directly to the base collector on 4317/4318.
Public documentation added under /docs/send-data/from-vendor/:
- index.md (overview + architecture + decision table)
- datadog.md, jaeger.md, splunk.md (per-vendor migration guides)
- From Vendor Agents sidebar entry added via astro.config.mjs
- Cross-link added from /docs/send-data/ overview
Validated end-to-end with real vendor SDKs:
- Datadog: dd-trace-py + FastAPI + patch_all() -> 42 spans in OpenSearch
with service.name, service.version, deployment.environment.name
preserved; instrumentationScope Datadog; parent/child chains intact
- Splunk HEC: splunk_handler (Python logging) -> 5 log records in
logs-otel-v1-* with com.splunk.source/sourcetype/index preserved
- Jaeger OTLP: jaegertracing/example-hotrod demo -> 40 spans, 6-service
topology, visible in APM and Discover Traces
Starlight docs build validated (115 pages, all internal links resolve).
SignalFx is not supported. The upstream signalfxreceiver is deprecated
with explicit guidance to migrate to OTLP.
Signed-off-by: Kyle Hounslow <kylhouns@amazon.com>
|
✅ Docs preview build completed successfully! All tests passed. |
|
Merged upstream as opensearch-project/observability-stack#224. Closing this fork PR. |
Description
Adds a
compat/package and adocker-compose.compat.ymloverlay that lets Datadog, Jaeger, and Splunk HEC agents send telemetry to observability-stack without application code changes. Includes public-facing migration guides underdocs/send-data/from-vendor/and a contributor writing tenets section inCONTRIBUTING.md.The overlay is opt-in and follows the existing
INCLUDE_COMPOSE_*activation pattern. The base collector, its config, and all existing pipelines are unchanged.Architecture
otel-collector-compatis a dedicated edge collector that runs upstreamopentelemetry-collector-contribreceivers. Each receiver accepts its vendor wire protocol, translates to the OTel data model via upstream translator packages, and forwards OTLP to the base collector. All enrichment and downstream routing continues to happen in the base pipeline.Modern OpenTelemetry SDK applications bypass the compat hop and continue sending OTLP directly to the base collector on 4317/4318.
Wire protocols supported
datadogreceiverdatadogreceiverdatadogreceiverstatsdreceiverjaegerreceiverjaegerreceiversplunkhecreceiversplunkhecreceiverAll upstream receiver READMEs are linked from the per-vendor docs. Attribute translation behavior is defined upstream — per-vendor docs list the 3–5 canonical attributes most users encounter and defer to upstream sources for the rest.
SignalFx is not included. The upstream
signalfxreceiveris deprecated with explicit guidance to migrate to OTLP.Activation
Adds
otel-collector-compatplus a bundled Jaegerhotroddemo on port 8080 that emits OTLP directly to the base collector (for validating the OTLP path end-to-end).Pipelines
datadog,jaegerdatadog,statsd,splunk_hecdatadog,splunk_hecThe compat collector uses only the
batchprocessor — no transforms, no enrichment. Those remain in the base collector.Validation
End-to-end validation with real vendor client libraries:
dd-trace-py4.8.0 + FastAPI +patch_all()otel-v1-apm-span-*. Resource-levelservice.name,service.version,deployment.environment.namepreserved.instrumentationScope.name: Datadog. Custom span tags and parent/child relationships intact. FastAPI auto-instrumentation spans + manualtracer.trace()spans both present.splunk_handler3.0.0 (Python logging handler)logs-otel-v1-*.com.splunk.source,com.splunk.sourcetype,com.splunk.indexpreserved as resource attributes.jaegertracing/example-hotrod:1.60Gotchas discovered during validation (documented in vendor pages):
Enable128BitTraceID, off by default). Trace IDs appear with upper 8 bytes zeroed without the flag.tracer.trace()spans getSPAN_KIND_UNSPECIFIED— the upstream receiver only assigns explicit kinds for HTTP/DB/gRPC/AWS SDK span names.host.namegets overwritten downstream by the base collector's resource detection. Users relying on HEChostfor per-sender identification should route it to a different attribute viahec_metadata_to_otel_attrs.severityText/severityNumberwill be empty. Python logging levels from clients likesplunk_handlerare embedded in the event body, not structured.fieldsvs. JSON-serializedevent). Verify your client's behavior before relying on field-level queries.Starlight docs build was validated with
npm run build— 115 pages built, all internal links resolve.Documentation
New public docs under
docs/starlight-docs/src/content/docs/send-data/from-vendor/:index.md— overview, architecture, decision table, port customization, links to viewing datadatadog.md— migration guide with decision table, DD_AGENT_HOST setup per library, canonical attribute mapping, caveatsjaeger.md— OTLP path + legacy wire protocol path, decision table, configuration examplessplunk.md— HEC endpoint setup, decision table, canonical metadata mapping, caveats including the host.name and severity findings aboveSidebar entry added via
astro.config.mjs; cross-link from/docs/send-data/overview.CONTRIBUTING.mdextended with a new "Writing Tenets (for agents)" section covering: framing, maintenance hygiene, accuracy, public-doc page structure, repo README conventions, and the principle that real-validation caveats are more trustworthy than theoretical ones.Files
New:
compat/README.md— overview + decision table + activationcompat/collector/config.compat.yaml— edge collector configcompat/collector/README.md— developer notes (local dev workflow, debug verbosity)compat/vendors/{datadog,jaeger,splunk}/README.md— thin repo READMEs pointing to public migration guidesdocker-compose.compat.yml— overlay service definitions (edge collector + hotrod)docs/starlight-docs/.../from-vendor/{index,datadog,jaeger,splunk}.md— public migration guidesChanged:
docker-compose.yml— one line added toinclude:block (INCLUDE_COMPOSE_COMPAT)docs/starlight-docs/astro.config.mjs— one sidebar entrydocs/starlight-docs/src/content/docs/send-data/index.md— one cross-linkCONTRIBUTING.md— new Writing Tenets sectionNot included (future work)
jaeger-client-*application (modern OTLP path is validated; thejaegerreceiverloads cleanly)compat/examples/for Python and Go Datadog SDKsIssues Resolved
N/A — no pre-existing issue.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.